package com.zhongge.arrayOJ;

/**
 * @ClassName RemoveElem 移动元素
 * @Description TODO 原地移除数组中所有的元素val，要求时间复杂度为O(N)，空间复杂度为O(1)
 * @Author 笨忠
 * @Date 2025/8/7 20:00
 * @Version 1.0
 */
public class RemoveElem {
    /**
     * 复杂度要求在o(N)的题目通常都是使用双指针
     * @param nums
     * @param val
     * @return
     */
    public static int removeElement(int[] nums, int val) {
        //首先看参数是否合法==》这是我们写程序的一个必修课
        if (nums == null) {
            return 0;
        }
        //在o(N)时间内完成说明就需要我们使用双指针
        int slow = 0;
        int fast = 0;
        for (; fast < nums.length;) {
            if (nums[fast] != val) {
                nums[slow] = nums[fast];
                fast++;
                slow++;
            } else {
                fast++;
            }
        }
        return slow;
    }
    public static void main(String[] args) {
        int[] nums = {3,2,2,3};
        int val = 3;
        int slow = removeElement(nums, val);
        for (int i = 0; i < slow; i++) {
            System.out.print(nums[i] + " ");
        }
        System.out.println();
    }
}
